' ======================================================================
' 执行所有测试用例
' ======================================================================
Public Sub test_all_case()
    ' 测试mergeArrayRefWithPrefix 集合合并
    test_UtilsArrayRef_mergeArrayRefWithPrefix

    ' 测试 wrapperToObjArrayRef: 对象的包装
    test_UtilsArrayRef_wrapperToObjArrayRef

    ' 测试 wrapperToPrimitiveArrayRef: 基础数据类型的包装
    test_UtilsArrayRef_wrapperToPrimitiveArrayRef

    ' 测试 reducePrimitiveArrayRefToStr: 基础数据类型的数组引用的连接
    test_UtilsArrayRef_reducePrimitiveArrayRefToStr
End Sub

' ======================================================================
' 各个方法的测试
' ======================================================================
' 测试mergeArrayRefWithPrefix 集合合并
Private Sub test_UtilsArrayRef_mergeArrayRefWithPrefix()
    Dim srcRef As IPrimitiveArrayRef
    Set srcRef = UtilsArrayRef.createRealPrimitiveArrayRef
    srcRef.Add "x1"
    srcRef.Add "x2"

    Dim descRef As IPrimitiveArrayRef
    Set descRef = UtilsArrayRef.createRealPrimitiveArrayRef
    descRef.Add "y1"
    descRef.Add "y2"

    ' ==================================================
    ' 1. 测试，前缀字符串是空字符串
    ' ==================================================
    UtilsArrayRef.mergeArrayRefWithPrefix srcRef, descRef, ""
    Debug.Assert srcRef.Count = 4
    Debug.Assert srcRef.Item(0) = "x1"
    Debug.Assert srcRef.Item(1) = "x2"
    Debug.Assert srcRef.Item(2) = "y1"
    Debug.Assert srcRef.Item(3) = "y2"

    ' ==================================================
    ' 检查结果
    ' ==================================================
    UtilsArrayRef.mergeArrayRefWithPrefix srcRef, descRef, "test"
    Debug.Assert srcRef.Count = 6
    Debug.Assert srcRef.Item(0) = "x1"
    Debug.Assert srcRef.Item(1) = "x2"
    Debug.Assert srcRef.Item(2) = "y1"
    Debug.Assert srcRef.Item(3) = "y2"
    Debug.Assert srcRef.Item(4) = "testy1"
    Debug.Assert srcRef.Item(5) = "testy2"

End Sub

' 测试 wrapperToObjArrayRef: 对象的包装
Private Sub test_UtilsArrayRef_wrapperToObjArrayRef()
    Dim v As Collection
    Set v = New Collection

    Dim result As IObjArrayRef
    Set result = UtilsArrayRef.wrapperToObjArrayRef(v)

    ' ==================================================
    ' 检查结果
    ' ==================================================
    Debug.Assert result.Count = 1
    Debug.Assert result.Item(0) Is v
End Sub

' 测试 wrapperToPrimitiveArrayRef: 基础数据类型的包装
Private Sub test_UtilsArrayRef_wrapperToPrimitiveArrayRef()
    Dim v As String
    v = "abc"

    Dim result As IPrimitiveArrayRef
    Set result = UtilsArrayRef.wrapperToPrimitiveArrayRef(v)

    ' ==================================================
    ' 检查结果
    ' ==================================================
    Debug.Assert result.Count = 1
    Debug.Assert result.Item(0) = v
End Sub

' 测试 reducePrimitiveArrayRefToStr: 基础数据类型的数组引用的连接
Private Sub test_UtilsArrayRef_reducePrimitiveArrayRefToStr()
    Dim arrRef As IPrimitiveArrayRef
    Set arrRef = UtilsArrayRef.createRealPrimitiveArrayRef

    Dim result As String 
    ' ==================================================
    ' 测试: 没有元素
    ' ==================================================
    result = UtilsArrayRef.reducePrimitiveArrayRefToStr(arrRef, ",")
    Debug.Assert result = ""

    ' ==================================================
    ' 测试: 只有一个元素
    ' ==================================================
    arrRef.Add "aa"

    result = UtilsArrayRef.reducePrimitiveArrayRefToStr(arrRef, ",")
    Debug.Assert result = "aa"

    ' ==================================================
    ' 测试: 有两个元素
    ' ==================================================
    arrRef.Add "bb"
    
    result = UtilsArrayRef.reducePrimitiveArrayRefToStr(arrRef, ",")
    Debug.Assert result = "aa,bb"
End Sub